home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / var / lib / python-support / python2.6 / invest / chart.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2009-10-12  |  7.8 KB  |  206 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import gtk
  5. import gtk.gdk as gtk
  6. import gobject
  7. import os
  8. import invest
  9. from gettext import gettext as _
  10. from invest import *
  11. import sys
  12. from os.path import join
  13. import urllib
  14. from threading import Thread
  15. import time
  16. AUTOREFRESH_TIMEOUT = 1200000
  17.  
  18. class _IdleObject(gobject.GObject):
  19.     '''
  20. \tOverride gobject.GObject to always emit signals in the main thread
  21. \tby emmitting on an idle handler
  22. \t'''
  23.     
  24.     def __init__(self):
  25.         gobject.GObject.__init__(self)
  26.  
  27.     
  28.     def emit(self, *args):
  29.         gobject.idle_add(gobject.GObject.emit, self, *args)
  30.  
  31.  
  32.  
  33. class ImageRetriever(Thread, _IdleObject):
  34.     '''
  35. \tThread which uses gobject signals to return information
  36. \tto the GUI.
  37. \t'''
  38.     __gsignals__ = {
  39.         'completed': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, []) }
  40.     
  41.     def __init__(self, image_url):
  42.         Thread.__init__(self)
  43.         _IdleObject.__init__(self)
  44.         self.image_url = image_url
  45.         self.retrieved = False
  46.  
  47.     
  48.     def run(self):
  49.         self.image = gtk.Image()
  50.         
  51.         try:
  52.             sock = urllib.urlopen(self.image_url, proxies = invest.PROXY)
  53.         except:
  54.             if invest.DEBUGGING:
  55.                 print 'Error while opening %s' % self.image_url
  56.             
  57.  
  58.         loader = gtk.gdk.PixbufLoader()
  59.         loader.connect(('closed',), (lambda loader: self.image.set_from_pixbuf(loader.get_pixbuf())))
  60.         loader.write(sock.read())
  61.         sock.close()
  62.         loader.close()
  63.         self.retrieved = True
  64.         self.emit('completed')
  65.  
  66.  
  67.  
  68. class FinancialChart:
  69.     
  70.     def __init__(self, ui):
  71.         self.ui = ui
  72.         win = ui.get_object('window')
  73.         win.set_title(_('Financial Chart'))
  74.         
  75.         try:
  76.             pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(join(invest.ART_DATA_DIR, 'invest_neutral.svg'), 96, 96)
  77.             self.ui.get_object('plot').set_from_pixbuf(pixbuf)
  78.         except Exception:
  79.             msg = None
  80.  
  81.         for widget in [
  82.             't',
  83.             'q']:
  84.             ui.get_object(widget).set_active(0)
  85.         
  86.         symbolentry = ui.get_object('s')
  87.         
  88.         refresh_chart_callback = lambda w: self.on_refresh_chart()
  89.         for widgets, signal in [
  90.             (('pm5', 'pm10', 'pm20', 'pm50', 'pm100', 'pm200', 'pe5', 'pe10', 'pe20', 'pe50', 'pe100', 'pe200', 'pb', 'pp', 'ps', 'pv', 'ar', 'af', 'ap', 'aw', 'am', 'ass', 'afs', 'av', 'avm'), 'toggled'),
  91.             (('t', 'q'), 'changed'),
  92.             (('s',), 'activate')]:
  93.             for widget in widgets:
  94.                 ui.get_object(widget).connect(signal, refresh_chart_callback)
  95.             
  96.         
  97.         ui.get_object('progress').hide()
  98.         self.autorefresh_id = 0
  99.         ui.get_object('autorefresh').connect('toggled', self.on_autorefresh_toggled)
  100.  
  101.     
  102.     def on_refresh_chart(self, from_timer = False):
  103.         tickers = self.ui.get_object('s').get_text()
  104.         if tickers.strip() == '':
  105.             return True
  106.         tickers = _[1]
  107.         win = self.ui.get_object('window')
  108.         title = _('Financial Chart - %s')
  109.         titletail = ''
  110.         for ticker in tickers:
  111.             titletail += '%s / ' % ticker
  112.         
  113.         title = title % titletail
  114.         win.set_title(title[:-3])
  115.         opt = ''
  116.         for ticker in tickers[1:]:
  117.             opt += '&c=%s' % ticker
  118.         
  119.         p = ''
  120.         for name, param in [
  121.             ('pm5', 5),
  122.             ('pm10', 10),
  123.             ('pm20', 20),
  124.             ('pm50', 50),
  125.             ('pm100', 100),
  126.             ('pm200', 200),
  127.             ('pe5', 5),
  128.             ('pe10', 10),
  129.             ('pe20', 20),
  130.             ('pe50', 50),
  131.             ('pe100', 100),
  132.             ('pe200', 200),
  133.             ('pb', ''),
  134.             ('pp', ''),
  135.             ('ps', ''),
  136.             ('pv', '')]:
  137.             if self.ui.get_object(name).get_active():
  138.                 p += '%s%s,' % (name[1], param)
  139.                 continue
  140.             []
  141.         
  142.         a = ''
  143.         for name, param in [
  144.             ('ar', 14),
  145.             ('af', 14),
  146.             ('ap', 12),
  147.             ('aw', 14),
  148.             ('am', '26-12-9'),
  149.             ('ass', ''),
  150.             ('afs', ''),
  151.             ('av', ''),
  152.             ('avm', '')]:
  153.             if self.ui.get_object(name).get_active():
  154.                 a += '%s%s,' % (name[1:], param)
  155.                 continue
  156.             []
  157.         
  158.         chart_base_url = 'http://ichart.europe.yahoo.com/z?s=%(s)s&t=%(t)s&q=%(q)s&l=%(l)s&z=%(z)s&p=%(p)s&a=%(a)s%(opt)s'
  159.         url = chart_base_url % {
  160.             's': tickers[0],
  161.             't': self.ui.get_object('t').get_active_text(),
  162.             'q': self.ui.get_object('q').get_active_text(),
  163.             'l': 'off',
  164.             'z': 'l',
  165.             'p': p,
  166.             'a': a,
  167.             'opt': opt }
  168.         progress = self.ui.get_object('progress')
  169.         progress.set_text(_('Opening Chart'))
  170.         progress.show()
  171.         image_retriever = ImageRetriever(url)
  172.         image_retriever.connect('completed', self.on_retriever_completed)
  173.         image_retriever.start()
  174.         self.on_autorefresh_toggled(self.ui.get_object('autorefresh'))
  175.         return True
  176.  
  177.     
  178.     def on_retriever_completed(self, retriever):
  179.         self.ui.get_object('plot').set_from_pixbuf(retriever.image.get_pixbuf())
  180.         progress = self.ui.get_object('progress')
  181.         if retriever.retrieved == True:
  182.             progress.set_text(_('Chart downloaded'))
  183.         else:
  184.             progress.set_text(_('Chart could not be downloaded'))
  185.  
  186.     
  187.     def on_autorefresh_toggled(self, autorefresh):
  188.         if self.autorefresh_id != 0:
  189.             gobject.source_remove(self.autorefresh_id)
  190.             self.autorefresh_id = 0
  191.         
  192.         if autorefresh.get_active():
  193.             self.autorefresh_id = gobject.timeout_add(AUTOREFRESH_TIMEOUT, self.on_refresh_chart, True)
  194.         
  195.  
  196.  
  197.  
  198. def show_chart(tickers):
  199.     ui = gtk.Builder()
  200.     ui.add_from_file(os.path.join(invest.BUILDER_DATA_DIR, 'financialchart.ui'))
  201.     chart = FinancialChart(ui)
  202.     ui.get_object('s').set_text(' '.join(tickers))
  203.     chart.on_refresh_chart()
  204.     return ui.get_object('window')
  205.  
  206.